package com.robotserver.orders.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.pdd.pop.ext.glassfish.tyrus.core.uri.internal.MultivaluedMap;
import com.pdd.pop.ext.glassfish.tyrus.core.uri.internal.MultivaluedStringMap;
import com.robotserver.orders.common.DateUtil;
import com.robotserver.orders.common.Tools;
import com.robotserver.orders.entity.AlimmTokens;
import com.robotserver.orders.entity.DyTokens;
import com.robotserver.orders.entity.JdTokens;
import com.robotserver.orders.entity.VipTokens;
import com.robotserver.orders.jobs.xxljob.ListenTokenRunSyncXxlJob;
import com.robotserver.orders.mapper.AlimmTokensMapper;
import com.robotserver.orders.mapper.DyTokensMapper;
import com.robotserver.orders.mapper.JdTokensMapper;
import com.robotserver.orders.mapper.VipTokensMapper;
import com.robotserver.orders.service.PullTokensService;
import com.robotserver.orders.vo.TokensVO;
import com.taobao.api.internal.toplink.embedded.websocket.util.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * @Auther: jianghan
 * @Date: 2019/11/12 10:36
 * @Description:
 */
@Service
public class PullTokensServiceImpl implements PullTokensService {

    private static Logger logger = LoggerFactory.getLogger(PullTokensServiceImpl.class);

    @Value("${tokens.url}")
    private String tokensUrl;

    @Value("${tokens.url_v3}")
    private String tokensUrl_v3;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private AlimmTokensMapper alimmTokensMapper;
    @Autowired
    private JdTokensMapper jdTokensMapper;
    @Autowired
    private VipTokensMapper vipTokensMapper;
    @Autowired
    private DyTokensMapper dyTokensMapper;

    @Override
    public void pullTokens() {

//        logger.info("-----2.0版本------更新tokens  开始---------");
//        ResponseEntity<TokensVO> responseEntity_v2 = restTemplate.postForEntity(tokensUrl,null, TokensVO.class);
//        TokensVO allTokens_v2 = responseEntity_v2.getBody();
//        if(allTokens_v2 != null){
//            List<AlimmTokens> alimmTokens = allTokens_v2.getData().getAlimmTokens();
//            //List<JdTokens> jdTokens = allTokens_v2.getData().getJdTokens();
//            List<VipTokens> vipTokens = allTokens_v2.getData().getVipTokens();
//            int now = DateUtil.getNowTime();
//
//            if(alimmTokens != null && alimmTokens.size() > 0){
//                for(AlimmTokens alimmToken : alimmTokens){
//                    if(StringUtils.isNotBlank(alimmToken.getAccessToken()) && alimmToken.getExptime() != null){
//                        AlimmTokens nowAlimmToken = alimmTokensMapper.getByUserId(alimmToken.getUserId());
//                        if (nowAlimmToken != null ){
//                            if (!alimmToken.getAccessToken().equals(nowAlimmToken.getAccessToken()) || alimmToken.getExptime().intValue() > nowAlimmToken.getExptime().intValue()) {
//                                // 修改
//                                alimmToken.setTokentype(2);
//                                alimmToken.setUpdateTime(now);
//                                alimmTokensMapper.update(alimmToken);
//                            }
//                        }else {
//                            // 添加
//                            alimmToken.setId(IdWorker.getId());
//                            alimmToken.setTokentype(2);
//                            alimmToken.setCreateTime(now);
//                            alimmToken.setUpdateTime(now);
//                            alimmTokensMapper.add(alimmToken);
//                        }
//                    }
//                }
//            }
//
//            if(vipTokens != null && vipTokens.size() > 0){
//                for(VipTokens vipToken:vipTokens){
//                    if(StringUtils.isNotBlank(vipToken.getAccessToken()) && vipToken.getExpiresTime() != null) {
//                        VipTokens nowVipToken = vipTokensMapper.getByOpenId(vipToken.getOpenId());
//                        if (nowVipToken != null) {
//                            // 修改
//                            if (!vipToken.getAccessToken().equals(nowVipToken.getAccessToken()) || vipToken.getExpiresTime().intValue() > nowVipToken.getExpiresTime().intValue() ) {
//                                vipToken.setUpdateTime(now);
//                                vipTokensMapper.update(vipToken);
//                            }
//                        } else {
//                            // 添加
//                            vipToken.setId(IdWorker.getId());
//                            vipToken.setCreateTime(now);
//                            vipToken.setUpdateTime(now);
//                            vipTokensMapper.add(vipToken);
//                        }
//                    }
//                }
//            }

            /**
             *  modify by liu 2021-3-22
             *  京东订单已经根据工具商去拉取，故不需要更新京东token
             */
//              if(jdTokens != null &&  jdTokens .size() > 0){
//                  for(JdTokens jdToken:jdTokens){
//                      if (jdToken.getType()==null || jdToken.getType()==1){
//                          JdTokens nowJdToken = jdTokensMapper.getByUnionId(jdToken.getUnionId());
//                          if (nowJdToken!=null ){
//                              // 修改
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.update(jdToken);
//                          }else {
//                              // 添加
//                              jdToken.setId(IdWorker.getId());
//                              jdToken.setCreateTime(now);
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.add(jdToken);
//                          }
//                      }else{
//                          JdTokens nowJdToken = jdTokensMapper.getByCode(jdToken.getAuthKey());
//                          if (nowJdToken!=null ){
//                              // 修改
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.update(jdToken);
//                          }else {
//                              // 添加
//                              jdToken.setId(IdWorker.getId());
//                              jdToken.setCreateTime(now);
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.add(jdToken);
//                          }
//                      }
//                  }
//              }
//
//        }

        try {
            logger.info("-----3.0版本------更新tokens  开始---------");

            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
            MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
            map.add("key", "1e9c1e34903fe80566a7640fc9e");
            HttpEntity<MultiValueMap<String, String>> formEntity_v3 = new HttpEntity<>(map, headers);
            ResponseEntity<TokensVO> responseEntity_v3 = restTemplate.postForEntity(tokensUrl_v3, formEntity_v3, TokensVO.class);
            TokensVO allTokens_v3 = responseEntity_v3.getBody();
            if(allTokens_v3 != null && allTokens_v3.getData() != null){
                List<AlimmTokens> alimmTokens = allTokens_v3.getData().getAlimmTokens();
                //List<JdTokens> jdTokens = allTokens_v3.getData().getJdTokens();
                List<VipTokens> vipTokens = allTokens_v3.getData().getVipTokens();
                List<DyTokens> dyTokens = allTokens_v3.getData().getDyTokens();

                int now = DateUtil.getNowTime();

                if(alimmTokens != null && alimmTokens.size() > 0){
                    logger.info("-----3.0版本------更新tokens  淘宝联盟更新数---------total=" + alimmTokens.size());
                    for(AlimmTokens alimmToken : alimmTokens){
                        try {
                            if(StringUtils.isNotBlank(alimmToken.getAccessToken()) && alimmToken.getExptime() != null){
                                AlimmTokens nowAlimmToken = alimmTokensMapper.getByUserIdAndTurnlink(alimmToken.getUserId(), alimmToken.getTurnlink());
                                if (nowAlimmToken != null ){
                                    if (!alimmToken.getAccessToken().equals(nowAlimmToken.getAccessToken()) || alimmToken.getExptime().intValue() > nowAlimmToken.getExptime().intValue()){
                                        // 修改
                                        alimmToken.setUpdateTime(now);
                                        alimmTokensMapper.update(alimmToken);
                                    }
                                }else {
                                    // 添加
                                    alimmToken.setId(IdWorker.getId());
                                    alimmToken.setCreateTime(now);
                                    alimmToken.setUpdateTime(now);
                                    alimmTokensMapper.add(alimmToken);
                                }
                            }
                        }catch (Exception e){

                        }
                    }
                }

                if(vipTokens != null && vipTokens.size() > 0){
                    logger.info("-----3.0版本------更新tokens  唯品会联盟更新数---------total=" + vipTokens.size());
                    for(VipTokens vipToken:vipTokens){
                        try{
                            if(StringUtils.isNotBlank(vipToken.getAccessToken()) && vipToken.getExpiresTime() != null){
                                VipTokens nowVipToken = vipTokensMapper.getByOpenId(vipToken.getOpenId());
                                if (nowVipToken != null){
                                    // 修改
                                    if (!vipToken.getAccessToken().equals(nowVipToken.getAccessToken()) || vipToken.getExpiresTime().intValue() > nowVipToken.getExpiresTime().intValue()){
                                        vipToken.setUpdateTime(now);
                                        vipTokensMapper.update(vipToken);
                                    }
                                }else {
                                    // 添加
                                    vipToken.setId(IdWorker.getId());
                                    vipToken.setCreateTime(now);
                                    vipToken.setUpdateTime(now);
                                    vipTokensMapper.add(vipToken);
                                }
                            }
                        }catch (Exception e){

                        }
                    }
                }

                if(dyTokens != null && dyTokens.size() > 0){
                    logger.info("-----3.0版本------更新tokens  抖音联盟更新数---------total=" + dyTokens.size());
                    for(DyTokens dyToken:dyTokens){
                        try{
                            if(StringUtils.isNotBlank(dyToken.getAccessToken()) && dyToken.getExptime() != null){
                                DyTokens nowDyToken = dyTokensMapper.getByAppId(dyToken.getAppId());
                                if (nowDyToken != null){
                                    // 修改
                                    if(Tools.getInteger(dyToken.getTokenType()).intValue() == 1){//穿山甲订单
                                        if (!dyToken.getAccessToken().equals(nowDyToken.getAccessToken())){
                                            dyToken.setUpdateTime(now);
                                            dyTokensMapper.update(dyToken);
                                        }
                                    }else{
                                        if (!dyToken.getAccessToken().equals(nowDyToken.getAccessToken()) || dyToken.getExptime().intValue() > nowDyToken.getExptime().intValue()){
                                            dyToken.setUpdateTime(now);
                                            dyTokensMapper.update(dyToken);
                                        }
                                    }
                                }else {
                                    // 添加
                                    dyToken.setId(IdWorker.getId());
                                    dyToken.setCreateTime(now);
                                    dyToken.setUpdateTime(now);
                                    dyTokensMapper.add(dyToken);
                                }
                            }
                        }catch (Exception e){

                        }
                    }
                }

                /**
                 *  modify by liu 2021-3-22
                 *  京东订单已经根据工具商去拉取，故不需要更新京东token
                 */
//              if(jdTokens != null &&  jdTokens .size() > 0){
//                  for(JdTokens jdToken:jdTokens){
//                      if (jdToken.getType()==null || jdToken.getType()==1){
//                          JdTokens nowJdToken = jdTokensMapper.getByUnionId(jdToken.getUnionId());
//                          if (nowJdToken!=null ){
//                              // 修改
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.update(jdToken);
//                          }else {
//                              // 添加
//                              jdToken.setId(IdWorker.getId());
//                              jdToken.setCreateTime(now);
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.add(jdToken);
//                          }
//                      }else{
//                          JdTokens nowJdToken = jdTokensMapper.getByCode(jdToken.getAuthKey());
//                          if (nowJdToken!=null ){
//                              // 修改
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.update(jdToken);
//                          }else {
//                              // 添加
//                              jdToken.setId(IdWorker.getId());
//                              jdToken.setCreateTime(now);
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.add(jdToken);
//                          }
//                      }
//                  }
//              }
            }
        }catch (Exception e){
            logger.error("同步联盟出错，error={}",e.getMessage());
        }

    }


    @Override
    public void pullTokens_V2() {

        logger.info("-----2.0版本------更新tokens  开始---------");
        ResponseEntity<TokensVO> responseEntity_v2 = restTemplate.postForEntity(tokensUrl,null, TokensVO.class);
        TokensVO allTokens_v2 = responseEntity_v2.getBody();
        if(allTokens_v2 != null){
            List<AlimmTokens> alimmTokens = allTokens_v2.getData().getAlimmTokens();
            //List<JdTokens> jdTokens = allTokens_v2.getData().getJdTokens();
            List<VipTokens> vipTokens = allTokens_v2.getData().getVipTokens();
            int now = DateUtil.getNowTime();

            if(alimmTokens != null && alimmTokens.size() > 0){
                for(AlimmTokens alimmToken : alimmTokens){
                    if(StringUtils.isNotBlank(alimmToken.getAccessToken()) && alimmToken.getExptime() != null){
                        AlimmTokens nowAlimmToken = alimmTokensMapper.getByUserIdAndTurnlink(alimmToken.getUserId(), alimmToken.getTurnlink());
                        if (nowAlimmToken != null ){
                            if (!alimmToken.getAccessToken().equals(nowAlimmToken.getAccessToken()) || alimmToken.getExptime().intValue() > nowAlimmToken.getExptime().intValue()) {
                                // 修改
                                alimmToken.setTokentype(2);
                                alimmToken.setUpdateTime(now);
                                alimmTokensMapper.update(alimmToken);
                            }
                        }else {
                            // 添加
                            alimmToken.setId(IdWorker.getId());
                            alimmToken.setTokentype(2);
                            alimmToken.setCreateTime(now);
                            alimmToken.setUpdateTime(now);
                            alimmTokensMapper.add(alimmToken);
                        }
                    }
                }
            }

            if(vipTokens != null && vipTokens.size() > 0){
                for(VipTokens vipToken:vipTokens){
                    if(StringUtils.isNotBlank(vipToken.getAccessToken()) && vipToken.getExpiresTime() != null) {
                        VipTokens nowVipToken = vipTokensMapper.getByOpenId(vipToken.getOpenId());
                        if (nowVipToken != null) {
                            // 修改
                            if (!vipToken.getAccessToken().equals(nowVipToken.getAccessToken()) || vipToken.getExpiresTime().intValue() > nowVipToken.getExpiresTime().intValue() ) {
                                vipToken.setUpdateTime(now);
                                vipTokensMapper.update(vipToken);
                            }
                        } else {
                            // 添加
                            vipToken.setId(IdWorker.getId());
                            vipToken.setCreateTime(now);
                            vipToken.setUpdateTime(now);
                            vipTokensMapper.add(vipToken);
                        }
                    }
                }
            }

            /**
             *  modify by liu 2021-3-22
             *  京东订单已经根据工具商去拉取，故不需要更新京东token
             */
//              if(jdTokens != null &&  jdTokens .size() > 0){
//                  for(JdTokens jdToken:jdTokens){
//                      if (jdToken.getType()==null || jdToken.getType()==1){
//                          JdTokens nowJdToken = jdTokensMapper.getByUnionId(jdToken.getUnionId());
//                          if (nowJdToken!=null ){
//                              // 修改
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.update(jdToken);
//                          }else {
//                              // 添加
//                              jdToken.setId(IdWorker.getId());
//                              jdToken.setCreateTime(now);
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.add(jdToken);
//                          }
//                      }else{
//                          JdTokens nowJdToken = jdTokensMapper.getByCode(jdToken.getAuthKey());
//                          if (nowJdToken!=null ){
//                              // 修改
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.update(jdToken);
//                          }else {
//                              // 添加
//                              jdToken.setId(IdWorker.getId());
//                              jdToken.setCreateTime(now);
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.add(jdToken);
//                          }
//                      }
//                  }
//              }
//
        }

//
//        logger.info("-----3.0版本------更新tokens  开始---------");
//
//        HttpHeaders headers = new HttpHeaders();
//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
//        MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
//        map.add("key", "1e9c1e34903fe80566a7640fc9e");
//        HttpEntity<MultiValueMap<String, String>> formEntity_v3 = new HttpEntity<>(map, headers);
//        ResponseEntity<TokensVO> responseEntity_v3 = restTemplate.postForEntity(tokensUrl_v3, formEntity_v3, TokensVO.class);
//        TokensVO allTokens_v3 = responseEntity_v3.getBody();
//        if(allTokens_v3 != null){
//            List<AlimmTokens> alimmTokens = allTokens_v3.getData().getAlimmTokens();
//            //List<JdTokens> jdTokens = allTokens_v3.getData().getJdTokens();
//            List<VipTokens> vipTokens = allTokens_v3.getData().getVipTokens();
//            int now = DateUtil.getNowTime();
//
//            if(alimmTokens != null && alimmTokens.size() > 0){
//                logger.info("-----3.0版本------更新tokens  淘宝联盟更新数---------total=" + alimmTokens.size());
//                for(AlimmTokens alimmToken : alimmTokens){
//                    if(StringUtils.isNotBlank(alimmToken.getAccessToken()) && alimmToken.getExptime() != null){
//                        AlimmTokens nowAlimmToken = alimmTokensMapper.getByUserId(alimmToken.getUserId());
//                        if (nowAlimmToken != null ){
//                            if (!alimmToken.getAccessToken().equals(nowAlimmToken.getAccessToken()) || alimmToken.getExptime().intValue() > nowAlimmToken.getExptime().intValue()){
//                                // 修改
//                                alimmToken.setUpdateTime(now);
//                                alimmTokensMapper.update(alimmToken);
//                            }
//                        }else {
//                            // 添加
//                            alimmToken.setId(IdWorker.getId());
//                            alimmToken.setCreateTime(now);
//                            alimmToken.setUpdateTime(now);
//                            alimmTokensMapper.add(alimmToken);
//                        }
//                    }
//                }
//            }
//
//            if(vipTokens != null && vipTokens.size() > 0){
//                logger.info("-----3.0版本------更新tokens  唯品会联盟更新数---------total=" + vipTokens.size());
//                for(VipTokens vipToken:vipTokens){
//                    if(StringUtils.isNotBlank(vipToken.getAccessToken()) && vipToken.getExpiresTime() != null){
//                        VipTokens nowVipToken = vipTokensMapper.getByOpenId(vipToken.getOpenId());
//                        if (nowVipToken != null){
//                            // 修改
//                            if (!vipToken.getAccessToken().equals(nowVipToken.getAccessToken()) || vipToken.getExpiresTime().intValue() > nowVipToken.getExpiresTime().intValue()){
//                                vipToken.setUpdateTime(now);
//                                vipTokensMapper.update(vipToken);
//                            }
//                        }else {
//                            // 添加
//                            vipToken.setId(IdWorker.getId());
//                            vipToken.setCreateTime(now);
//                            vipToken.setUpdateTime(now);
//                            vipTokensMapper.add(vipToken);
//                        }
//                    }
//                }
//            }

            /**
             *  modify by liu 2021-3-22
             *  京东订单已经根据工具商去拉取，故不需要更新京东token
             */
//              if(jdTokens != null &&  jdTokens .size() > 0){
//                  for(JdTokens jdToken:jdTokens){
//                      if (jdToken.getType()==null || jdToken.getType()==1){
//                          JdTokens nowJdToken = jdTokensMapper.getByUnionId(jdToken.getUnionId());
//                          if (nowJdToken!=null ){
//                              // 修改
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.update(jdToken);
//                          }else {
//                              // 添加
//                              jdToken.setId(IdWorker.getId());
//                              jdToken.setCreateTime(now);
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.add(jdToken);
//                          }
//                      }else{
//                          JdTokens nowJdToken = jdTokensMapper.getByCode(jdToken.getAuthKey());
//                          if (nowJdToken!=null ){
//                              // 修改
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.update(jdToken);
//                          }else {
//                              // 添加
//                              jdToken.setId(IdWorker.getId());
//                              jdToken.setCreateTime(now);
//                              jdToken.setUpdateTime(now);
//                              jdTokensMapper.add(jdToken);
//                          }
//                      }
//                  }
//              }
//        }



    }




}
